﻿/// <reference path="../jquery-1.7.1.min.js" />
/// <reference path="../jquery.dataTables.min.js" />

//Создание таблицы со списком запросов
var _table = {

    //ID элемента <table> который будет заменяться
    itemName: 'grid',

    //Указатель на созданную таблицу
    table: null,

    //Функция сервера, для получения списка запросов
    urlGet: "/DataService.asmx/GetCountryBy",

    //Функция сервера, для удаления запроса
    urlDel: "/DataService.asmx/DeleteCountryById",

    //Создание таблицы средствами JQuery
    //Inputs:	
    //Return:
    create: function () {
        this.table = $('#' + this.itemName).dataTable({
            "bProcessing": true,
            "bScrollCollapse": true,
            "bPaginate": true,
            "bJQueryUI": false,
            "sPaginationType": "bootstrap",
            "sAjaxSource": this.urlGet,
            "sAjaxDataProp": "aaData",
            "bServerSide": true,
            "sDom": "<'row'r>t<'row'<'span8'p><'offset4 span8'l><'span4'i>>",
            "fnServerData": function (sSource, aoData, fnCallback) {
                $.ajax({
                    type: "POST",
                    url: sSource,
                    data: aoData,
                    success: function (res) {
                        if (res == null)
                            return;
                        var resText = res.text != 'undefined' && res.text != undefined ? res.text : res.documentElement.textContent;

                        if (resText != null && resText.length > 0 && resText.charAt(0) != '{')
                            alert(resText);
                        else if (fnCallback != null) {
                            fnCallback($.parseJSON(resText));
                        }
                    }
                });
            },
            oLanguage: {
                "sProcessing": "Выполняется...",
                "sLengthMenu": "По _MENU_ ",
                "sZeroRecords": "Нет соответствующих записей",
                "sZeroFilterRecords": "Нет соответствующих результатов из <b>_MAX_</b> Общие результаты",
                "sInfo": "Отображено <b>_START_ - _END_</b> из <b>_TOTAL_</b> записей",
                "sInfoEmpty": "Нет записей",
                "sInfoFiltered": "(фильтруется из <b>_MAX_</b> элементов)",
                "sInfoPostFix": "",
                "sSearch": "Поиск:",
                "sUrl": "",
                "oPaginate": {
                    "sFirst": "Первая",
                    "sPrevious": "&lt;",
                    "sNext": "&gt;",
                    "sLast": "Последняя"
                }
            },
            aoColumns: [
					{ "mDataProp": "name" },
                    {
                        //Пользовательская колонка для отображения иконки-кнопки удаления записи
                        "fnRender": function (oObj) {
                            return "&nbsp;<img src='/img/ico/ico-edit.gif' title='Редактировать' class='edit'/><img src='/img/ico/ico-delete.gif' title='Удалить' class='delete'/>";
                        },
                        "bSortable": false,
                        "bSearchable": false
                    }
			]
        });

        var _tbl = this.table;

        //При наведении на строку в таблицы меняется курсор и обрабатывается click для выбора записи
        _tbl.find("tbody")
            .hover(function() {
                $(this).css('cursor', 'pointer');
            }, function() {
                $(this).css('cursor', 'default');
            });

        //Обработка события click на кнопке удаления
        _tbl.find('.delete').live('click', function (event) {
            var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
            _table.delByIndex(pos);
        });

        //Обработка события click на кнопке удаления
        _tbl.find('.edit').live('click', function (event) {
            var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
            _table.editByIndex(pos);
        });

        //Обработка события click на кнопке детального просмотра
        _tbl.find('.detail').live('click', function (event) {
            var pos = _table.table.fnGetPosition($(this).parent().parent()[0]);
            _table.detailByIndex(pos);
        });
    },

    //Функция редактирования записи по индексу
    editByIndex: function (index) {
        var data = _table.table.fnGetData(index);
        location.href = 'CountryEdit.aspx?id=' + data.ID;
    },

    //Функция просмотра записи по индексу
    detailByIndex: function (index) {
        var data = _table.table.fnGetData(index);
        location.href = 'CountryDetail.aspx?id=' + data.ID;
    },

    //Функция удаления записи по индексу
    //Inputs:	index - индекс
    //Return:
    delByIndex: function (index) {
        var data = _table.table.fnGetData(index);
        if (data == null)
            return;

        var _index = index;

        $('#modal-window').removeClass('hide fade').show();
        var btn = $('#btnYes');
        btn.bind('click', function () {

            _table.delFromDb(data, function () { _table.table.fnDeleteRow(_index); });
            $('#modal-window').hide();
            btn.unbind('click');
        });
    },

    //Функция удаления записи из БД.
    //Inputs:	data - указатель на объект Request
    //			complete - функция, вызывается по завершению удаления
    //Return:
    delFromDb: function (data, complete) {
        var pars = {
            id: data.ID
        };

        $.ajax({
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            type: "POST",
            url: this.urlDel,
            data: '{id:' + data.ID + '}',
            success: function (res) {
                if (res.d == 'OK') {
                    if (complete != null)
                        complete();
                }
                else
                    alert(res.d);
            }
        });
    }
};

//Создание таблицы
$(document).ready(function () {
    //Необходимо для работы ajax запросов get/post
    jQuery.support.cors = true;

    //Создать таблицу
    _table.create();
});
